package com.smart.translator.util;

import android.util.Log;

/**
 * 音频重采样使用示例
 * 展示如何将8kHz PCM音频转换为16kHz并发送到WebSocket
 */
public class AudioResamplingExample {
    private static final String TAG = "AudioResamplingExample";
    
    private AsrWsClient asrWsClient;
    private AudioResampler audioResampler;
    
    public AudioResamplingExample() {
        // 初始化ASR客户端
        asrWsClient = new AsrWsClient();
        
        // 启用音频重采样
        asrWsClient.enableResampling();
        
        // 设置回调
        asrWsClient.setCallback(new AsrWsClient.AsrWsCallback() {
            @Override
            public void onConnected() {
                Log.d(TAG, "ASR WebSocket connected");
                // 连接成功后发送初始请求
                asrWsClient.sendInitialRequest();
            }
            
            @Override
            public void onInitialRequestSent() {
                Log.d(TAG, "ASR initial request sent");
            }
            
            @Override
            public void onMessage(String text, boolean isFinal) {
                Log.d(TAG, "ASR result: " + text + " (final: " + isFinal + ")");
            }
            
            @Override
            public void onError(String error) {
                Log.e(TAG, "ASR error: " + error);
            }
            
            @Override
            public void onClosed() {
                Log.d(TAG, "ASR WebSocket closed");
            }
        });
    }
    
    /**
     * 开始ASR识别
     */
    public void startRecognition() {
        // 连接到ASR服务
        asrWsClient.connect();
    }
    
    /**
     * 发送8kHz PCM音频数据
     * @param audioData 8kHz PCM音频数据
     * @param isLast 是否为最后一块数据
     */
    public void sendAudioData(byte[] audioData, boolean isLast) {
        if (asrWsClient.canSendAudioData()) {
            // 发送音频数据，内部会自动进行8kHz -> 16kHz重采样
            asrWsClient.sendAudioData(audioData, isLast);
        } else {
            Log.w(TAG, "Cannot send audio data, ASR not ready");
        }
    }
    
    /**
     * 停止ASR识别
     */
    public void stopRecognition() {
        // 发送空数据表示结束
        asrWsClient.sendAudioData(new byte[0], true);
        
        // 关闭连接
        asrWsClient.close();
    }
    
    /**
     * 使用示例：从音频录制器获取8kHz PCM数据并发送
     */
    public void exampleUsage() {
        // 1. 开始识别
        startRecognition();
        
        // 2. 模拟从音频录制器获取8kHz PCM数据
        // 这里假设你有一个音频录制器提供8kHz PCM数据
        /*
        AudioRecorder recorder = new AudioRecorder();
        recorder.setOnAudioDataListener(new AudioRecorder.OnAudioDataListener() {
            @Override
            public void onAudioData(byte[] audioData) {
                // 发送8kHz PCM数据，内部会自动重采样为16kHz
                sendAudioData(audioData, false);
            }
            
            @Override
            public void onRecordingFinished() {
                // 录音结束，发送最后一块数据
                sendAudioData(new byte[0], true);
            }
        });
        */
        
        // 3. 停止识别
        // stopRecognition();
    }
    
    /**
     * 手动重采样示例（如果不需要自动重采样）
     */
    public void manualResamplingExample() {
        // 禁用自动重采样
        asrWsClient.disableResampling();
        
        // 手动创建重采样器
        AudioResampler resampler = new AudioResampler();
        
        // 模拟8kHz PCM数据
        byte[] audio8k = new byte[1600]; // 100ms的8kHz音频数据
        
        // 手动重采样
        byte[] audio16k = resampler.resample8kTo16k(audio8k);
        
        // 发送重采样后的16kHz数据
        asrWsClient.sendAudioData(audio16k, false);
    }
    
    /**
     * 获取音频统计信息
     */
    public void getAudioStats() {
        if (audioResampler != null) {
            int bufferSize = audioResampler.getBufferSize();
            Log.d(TAG, "Audio resampler buffer size: " + bufferSize + " bytes");
        }
    }
} 